package com.saver.core.persistence;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;

import com.saver.core.domain.Establecimiento;

public class EstablecimientoSQLite extends DatabaseHelper {
	
	private static final String CLASE = "EstablecimientoSQLite";

	private static final int VERSION = 1;
	private static final String NAME = "saverDB" ;
	private static final CursorFactory FACTORY = null;
	
	private static final String[] COLUMNAS = new String []{"ID_ESTABLECIMIENTO", "ID_CATEGORIA", "NOMBRE", "ID_SERVIDOR"};

	public EstablecimientoSQLite(Context context) {
		super(context, NAME, FACTORY, VERSION);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
	}
	
	public void guardar (Establecimiento establecimiento) {
		SQLiteDatabase db = getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("ID_ESTABLECIMIENTO", establecimiento.getIdEstablecimiento());
		values.put("ID_CATEGORIA", establecimiento.getIdCategoria());
		values.put("NOMBRE", establecimiento.getNombre());
		values.put("ID_SERVIDOR", establecimiento.getIdServidor());
		
		int id = (int)db.insert("ESTABLECIMIENTOS", null, values);
		establecimiento.setIdEstablecimiento(id);
		db.close();
	}
	
	public void actualizar (Establecimiento establecimiento) {
		SQLiteDatabase db = getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("ID_ESTABLECIMIENTO", establecimiento.getIdEstablecimiento());
		values.put("ID_CATEGORIA", establecimiento.getIdCategoria());
		values.put("NOMBRE", establecimiento.getNombre());
		values.put("ID_SERVIDOR", establecimiento.getIdServidor());
		db.update("ESTABLECIMIENTOS", values, "ID_ESTABLECIMIENTO=?", 
				new String[]{establecimiento.getIdEstablecimiento().toString()});
		db.close();
	}
	
	public Establecimiento buscarPorId (Integer id) {
		Establecimiento establecimiento = null;
		Log.i(CLASE, "id: " + id);
		if (id != null) {
			SQLiteDatabase db = getReadableDatabase();
			Cursor cursor = db.query("ESTABLECIMIENTOS", COLUMNAS, "ID_ESTABLECIMIENTO=?", 
					new String[]{id.toString()}, null, null, null);
			
			if (cursor.moveToNext()) {
				establecimiento = crearEstablecimiento(cursor);
			}
			db.close();
			
		}
		return establecimiento;
	}
	
	public Establecimiento buscarPorIdServidor (Integer idServidor) {
		Establecimiento establecimiento = null;
		Log.i(CLASE, "idServidor: " + idServidor);
		if (idServidor != null) {
			SQLiteDatabase db = getReadableDatabase();
			Cursor cursor = db.query("ESTABLECIMIENTOS", COLUMNAS, "ID_SERVIDOR=?", 
					new String[]{idServidor.toString()}, null, null, null);
			
			if (cursor.moveToNext()) {
				establecimiento = crearEstablecimiento(cursor);
			}
			db.close();
			
		}
		return establecimiento;
	}
	
	public List<Establecimiento> buscarTodo () {
		SQLiteDatabase db = getReadableDatabase();
		Cursor cursor = db.query("ESTABLECIMIENTOS", COLUMNAS, null, null, null, null, "NOMBRE");
		ArrayList<Establecimiento> establecimientos = new ArrayList<Establecimiento>();
		while (cursor.moveToNext()) {
			Establecimiento establecimiento = crearEstablecimiento(cursor);
			establecimientos.add(establecimiento);
		}
		db.close();
		return establecimientos;
	}
	
	public List<Establecimiento> buscarPorNombreLike (String nombre) {
		SQLiteDatabase db = getReadableDatabase();
		Cursor cursor = db.query("ESTABLECIMIENTOS", COLUMNAS, "NOMBRE like ?", 
				new String[]{"%" + nombre + "%"}, null, null, "NOMBRE");
		
		ArrayList<Establecimiento> establecimientos = new ArrayList<Establecimiento>();
		while (cursor.moveToNext()) {
			Establecimiento establecimiento = crearEstablecimiento(cursor);
			establecimientos.add(establecimiento);
		}
		db.close();
		return establecimientos;
	}

	private Establecimiento crearEstablecimiento(Cursor cursor) {
		Establecimiento establecimiento = new Establecimiento();
		establecimiento.setIdEstablecimiento(cursor.getInt(0));
		establecimiento.setIdCategoria(cursor.getInt(1));
		establecimiento.setNombre(cursor.getString(2));
		establecimiento.setIdServidor(cursor.getInt(3));
		return establecimiento;
	}

}
